package wodegua.d23_test;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 目前有100名囚犯，每个因犯的编号是1-200之间的随机数。
 * 现在要求依次随机生成100名囚犯的编号(要求这些因犯的编号是不能重复的)，然后让他们依次站成一排。
 * (注:位置是从1开始计数的)，接下来，国王命令手下先干掉全部奇数位置处的人。
 * 剩下的人，又从新按位置1开始，再次干掉全部奇数位置处的人，依此类推，直到最后剩下一个人为止，剩下的这个人为幸存者。
 *
 * 具体功能点的要求如下:
 * 请输出幸存者的编号，以及他第一次所占的位置值是多少。
 */
public class Test01 {
    public static List<Person> list = new ArrayList<>();
    public static void main(String[] args) {
        Random random = new Random();
        for (int i = 1; i <= 100; i++) {
            int number = random.nextInt(201);
            while (!exit(number)) {
                number = random.nextInt(201);
            }
            list.add(new Person(i,number));
        }
        System.out.println(list);

        while (list.size() != 1) {
            List<Person> temp = new ArrayList<>();
            for (int i = 1; i < list.size(); i+=2) {
                temp.add(list.get(i));
            }
            list = temp;
        }
        System.out.println(list);
    }

    private static boolean exit(Integer number){
        for (Person person : list) {
            if (person.getNumber().equals(number)) {
                return false;
            }
        }
        return true;
    }
}

class Person{
    private Integer location;
    private Integer number;

    public Person() {
    }

    public Person(Integer location, Integer number) {
        this.location = location;
        this.number = number;
    }

    public Integer getLocation() {
        return location;
    }

    public void setLocation(Integer location) {
        this.location = location;
    }

    public Integer getNumber() {
        return number;
    }

    public void setNumber(Integer number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return "Person{" +
                "location=" + location +
                ", number=" + number +
                '}';
    }
}
